﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using EYDIngenieria.ERP.ObjetosDeNegocio.Dominio;

public partial class Mantenedores_MantenedorProductos : System.Web.UI.Page
{
    private EYDIngenieria.ERP.Aplicacion.Mantenedores.MantenedorProducto mantenedor =
        new EYDIngenieria.ERP.Aplicacion.Mantenedores.MantenedorProducto();

    private EYDIngenieria.ERP.Aplicacion.Mantenedores.MantenedorProveedor mantenedorProveedor =
        new EYDIngenieria.ERP.Aplicacion.Mantenedores.MantenedorProveedor();

   
   
   
    protected void Page_Load(object sender, EventArgs e)
    {
        if (Session.Keys.Count == 0)
            Response.Redirect("../Default.aspx");
        if (!IsPostBack)
            MantenedorVistaInicial();

    }
     private void MantenedorVistaInicial()
    {
        ActivarFormulario(false);


        btnNuevo.Visible = true;
        btnAceptar.Visible = false;
        btnCancelar.Visible = false;
        btnEliminar.Visible = false;
        btnModificar.Visible = false;
        SetearFormulario();
    }

    private void ActivarFormulario(bool activado)
    {
        txbCodigo.Enabled = activado;
        txbNombre.Enabled = activado;
        txbCodigoDeBarras.Enabled = activado;
        txbDescripcion.Enabled = activado;
        txbStockMinimo.Enabled = activado;
        txbStockMaximo.Enabled = activado;
        lbxProveedores.Enabled = activado;
        lbxProveedoresDelProducto.Enabled = activado;
        btnQuitar.Enabled = activado;
        btnAgregar.Enabled = activado;
    }

    private void MantenedorVisualizacion()
    {
        SetearFormulario();
        ActivarFormulario(false);
        btnNuevo.Visible = true;
        btnAceptar.Visible = false;
        btnCancelar.Visible = false;
        btnEliminar.Visible = true;
        btnModificar.Visible = true;
        
    }

    private void MantenedorVistaGestion()
    {
        SetearFormulario();
        ActivarFormulario(true);
        btnNuevo.Visible = false;
        btnAceptar.Visible = true;
        btnCancelar.Visible = true;
        btnEliminar.Visible = false;
        btnModificar.Visible = false;
    }
    protected void btnNuevo_Click(object sender, EventArgs e)
    {
        gdvProductos.SelectedIndex = -1;
        SetearFormulario();
        MantenedorVistaGestion();
    }
    protected void btnModificar_Click(object sender, EventArgs e)
    {
        MantenedorVistaGestion();
    }
    protected void btnEliminar_Click(object sender, EventArgs e)
    {
        int id = (gdvProductos.SelectedValue == null) ? 0 : int.Parse(gdvProductos.SelectedValue.ToString());
        if (id == 0)
            return;

        Producto u = mantenedor.Obtener(id);
        u.Codigo = txbCodigo.Text;
        u.Nombre = txbNombre.Text;
        mantenedor.Eliminar(u);
        gdvProductos.SelectedIndex = -1;
        ActualizaDataSource();
        SetearFormulario();
    }
    protected void btnCancelar_Click(object sender, EventArgs e)
    {
        int id = (gdvProductos.SelectedValue == null) ? 0 : int.Parse(gdvProductos.SelectedValue.ToString());
        if (id > 0)
            MantenedorVisualizacion();
        else
            MantenedorVistaInicial();
    }
    protected void btnAceptar_Click(object sender, EventArgs e)
    {
        int id = (gdvProductos.SelectedValue == null) ? 0 : int.Parse(gdvProductos.SelectedValue.ToString());
        EYDIngenieria.ERP.ObjetosDeNegocio.Dominio.Producto o = new Producto();
        o.Codigo = txbCodigo.Text;
        o.Nombre = txbNombre.Text;
        o.CodigoDeBarras = txbCodigoDeBarras.Text;
        o.Descripcion = txbDescripcion.Text;
        o.StockMinimo = int.Parse(txbStockMinimo.Text);
        o.StockMaximo = int.Parse(txbStockMaximo.Text);
        o.Id = id;
        o.UnidadDeMedida = new UnidadDeMedida();
        o.UnidadDeMedida.Id = int.Parse(ddlMedida.SelectedValue);
        o.Familia = new FamiliaProducto();
        o.Familia.Id = int.Parse(ddlFamilia.SelectedValue);
        o.Proveedores = new List<Proveedor>();
        Proveedor p;
        foreach (ListItem i in lbxProveedoresDelProducto.Items)
        {
            p= new Proveedor();
            p.Id = int.Parse(i.Value);
            o.Proveedores.Add(p);
        }

        if (id == 0)
            mantenedor.Agregar(o);
        else
            mantenedor.Modificar(o);

        ActualizaDataSource();
        MantenedorVistaInicial();

    }

    private void SetearFormulario()
    {
        int id = (gdvProductos.SelectedValue == null) ? 0 : int.Parse(gdvProductos.SelectedValue.ToString());
        txbCodigo.Text = string.Empty;
        txbNombre.Text = string.Empty;
        txbCodigoDeBarras.Text = string.Empty;
        txbDescripcion.Text = string.Empty;
        txbStockMinimo.Text = string.Empty;
        txbStockMaximo.Text = string.Empty;
        lbxProveedoresDelProducto.Items.Clear();
        lbxProveedoresDelProducto.DataValueField = "Id";
        lbxProveedoresDelProducto.DataTextField = "RazonSocial";
        ddlFamilia.SelectedIndex = -1;
        ddlMedida.SelectedIndex = -1;

        odsProveedoresDisponibles.Select();
        odsProveedoresDisponibles.DataBind();
        lbxProveedores.DataBind();
        
       
        if(id>0)
        {
            Producto p = mantenedor.Obtener(id);
            ddlFamilia.SelectedValue = p.Familia.Id.ToString();
            ddlMedida.SelectedValue = p.UnidadDeMedida.Id.ToString();
            txbCodigo.Text = p.Codigo;
            txbNombre.Text = p.Nombre;
            txbCodigoDeBarras.Text = p.CodigoDeBarras;
            txbDescripcion.Text = p.Descripcion;
            txbStockMinimo.Text = p.StockMinimo.ToString();
            txbStockMaximo.Text = p.StockMaximo.ToString();
            lbxProveedoresDelProducto.DataSource = p.Proveedores;
            lbxProveedoresDelProducto.DataBind();
            foreach (ListItem i in lbxProveedoresDelProducto.Items)
            {
                lbxProveedores.Items.Remove(i);

            }
            
        }
    }

     private void ActualizaDataSource()
    {
        odsProductos.Select();
        odsProductos.DataBind();
         gdvProductos.DataBind();
    }
    protected void gdvProductos_SelectedIndexChanged(object sender, EventArgs e)
    {
        MantenedorVisualizacion();
    }
    
    protected void btnAgregar_Click(object sender, ImageClickEventArgs e)
    {
        if(lbxProveedores.SelectedIndex<0)
            return;
        
        foreach (ListItem i in lbxProveedores.Items)
            if(i.Selected) 
                lbxProveedoresDelProducto.Items.Add(i);

        foreach (ListItem i in lbxProveedoresDelProducto.Items)  
                lbxProveedores.Items.Remove(i);

        lbxProveedores.SelectedIndex = -1;
        lbxProveedoresDelProducto.SelectedIndex = -1;
    }

    protected void btnQuitar_Click(object sender, ImageClickEventArgs e)
    {
        if (lbxProveedoresDelProducto.SelectedIndex<0)
            return;
        foreach (ListItem i in lbxProveedoresDelProducto.Items)
            if (i.Selected)
                lbxProveedores.Items.Add(i);

        foreach (ListItem i in lbxProveedores.Items)
            lbxProveedoresDelProducto.Items.Remove(i);

        lbxProveedores.SelectedIndex = -1;
        lbxProveedoresDelProducto.SelectedIndex = -1;

    }
}
